package org.NoInLeetcode;


import java.util.*;

/**
 * 给出一组数，求出最长的子串。使得这个子串中的数最大值和最小值的差值最大为1。
 * 如1 5 4 1 2 4 2 5 5。最长子串为5 4 4 5 5,长度为5。
 */
public class Question1 {

//    public static void main(String[] args) {
//        Scanner input = new Scanner(System.in);
//        String str = input.nextLine();
//        String[] strArr = str.split(" ");
//        int[] inputArr = new int[strArr.length];
//
//        for (int i = 0; i < strArr.length; i++) {
//            inputArr[i] = Integer.parseInt(strArr[i]);
//        }
//
//        int maxLength = findMaxLength(inputArr);
//        System.out.println(maxLength);
//    }
//
//    private static int findMaxLength(int[] arr) {
//      int maxLength =1;
//        for (int i = 0; i < arr.length; i++) {
//            int piv = arr[i];
//            int [] temp = new int[i+1];
//            System.arraycopy(arr,0,temp,0,i+1);
//            Arrays.sort(temp);
//            for (int j = 0; j < temp.length; j++) {
//                if (piv==temp[j]){
//
//                }
//            }
//        }
//
//        return maxLength;
//    }

    public static int findLongestSubarray(int[] arr) {
        int maxLength = 0; // 存储最大长度

        // 双指针遍历数组
        for (int start = 0; start < arr.length; start++) {
            int min = arr[start];
            int max = arr[start];
            // end 指针向右移动，扩展窗口
            for (int end = start; end < arr.length; end++) {
                min = Math.min(min, arr[end]);
                max = Math.max(max, arr[end]);

                // 检查当前窗口内的最大值和最小值的差是否不大于1
                if (max - min <= 1) {
                    maxLength = Math.max(maxLength, end - start + 1);
                } else {
                    // 一旦差值超过1，停止扩展这个起点的窗口
                    break;
                }
            }
        }

        return maxLength;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数组长度:");
        int n = scanner.nextInt();
        int[] arr = new int[n];

        System.out.println("请输入数组元素:");
        for (int i = 0; i < n; i++) {
            arr[i] = scanner.nextInt();
        }

        int result = findLongestSubarray(arr);
        System.out.println("满足条件的最长子数组的长度为: " + result);
        scanner.close();
    }
}
